package com.hmall.common.config;

import com.hmall.common.interceptor.UserInfoInterceptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 配置拦截器
 */

/**
 * ConditionalOnClass注解可以用来指定在类路径中存在特定的类时才加载某个配置类或Bean。
 * 这个注解可以用于自动配置类或普通的Spring组件中，以实现根据类路径中的情况来决定是否加载某个配置或Bean。
 * 添加@ConditionalOnClass(DispatcherServlet.class)的原因：
 * 因为hm-gateway中也引用了common模块，而我们知道gateway使用的openfeign虽然也处理http请求，
 * 但是底层不是靠SpringMvc实现的，而现在设计了只要引用common这个包就会自动装配MvcConfig配置类，
 * 然而hm-gateway底层没有springmvc自然无法自动装配MvcConfig配置类，会报错。
 * 所以我们需要设计成只有依赖了SpringMvc的微服务模块才自动装配，而SpringMvc的核心类就是
 */
@Configuration
@ConditionalOnClass(DispatcherServlet.class)
public class MvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new UserInfoInterceptor());
    }

}
